#!/bin/bash

# 确保程序已编译
make clean
make -j

# 创建结果目录
mkdir -p results/threadscan

# 设置测试矩阵大小（M=N=K的方阵）
SIZES=(1024 2048)

# 线程数扫描范围
THREADS=(1 2 4 8 16 32)

# 仅测试CPU模式（线程测试只对CPU有意义）
METHOD="CPU"
OPTION="-c"

# 每种配置重复测试次数
REPEAT=3

# 结果文件
RESULT_FILE="results/threadscan/performance_data.csv"

# 创建结果文件表头
echo "Method,Size,Threads,Time(ms),GFLOPS,RepeatNum" > $RESULT_FILE

echo "====================================================="
echo "开始线程数扫描测试"
echo "====================================================="

for SIZE in "${SIZES[@]}"; do
    echo "测试矩阵大小: ${SIZE}x${SIZE}"
    
    # 创建输入文件
    INPUT_FILE="input_${SIZE}.txt"
    echo "${SIZE} ${SIZE} ${SIZE}" > $INPUT_FILE
    
    for THREAD_COUNT in "${THREADS[@]}"; do
        echo "线程数: $THREAD_COUNT"
        
        for r in $(seq 1 $REPEAT); do
            echo "重复测试 #$r"
            
            # 运行程序并捕获输出
            OUTPUT_FILE="results/threadscan/${METHOD}_${SIZE}_t${THREAD_COUNT}_${r}.txt"
            
            # 使用自动方式输入矩阵大小，设置线程数
            ./matmul -t $THREAD_COUNT -T 1 $OPTION -v < $INPUT_FILE > $OUTPUT_FILE 2>&1
            
            # 从输出中提取执行时间和GFLOPS
            TIME_MS=$(grep -o "矩阵乘法: [0-9.]\+ ms" $OUTPUT_FILE | awk '{print $2}')
            if [ -z "$TIME_MS" ]; then
                TIME_MS=$(grep -o "矩阵乘法: [0-9.]\+ s" $OUTPUT_FILE | awk '{print $2 * 1000}')
            fi
            
            GFLOPS=$(grep -o "性能: [0-9.]\+ GFLOPS" $OUTPUT_FILE | awk '{print $2}')
            
            # 将结果添加到CSV文件
            echo "$METHOD,$SIZE,$THREAD_COUNT,$TIME_MS,$GFLOPS,$r" >> $RESULT_FILE
        done
    done
done

echo "线程扫描测试完成! 结果保存在 $RESULT_FILE"

# 如果安装了Python和matplotlib，则绘制性能图表
if command -v python3 &> /dev/null; then
    echo "生成线程扫描性能可视化图表..."
    python3 plot_threadscan.py
fi 